﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 坦克大战.Properties;

namespace 坦克大战
{

    class 敌人坦克:移动物体
    {
        Random rd = new Random();
        public int 攻击速度 { set; get; }
    

        public int 攻击计数;
         public int 转向速度 { set; get; }
        public int 转向计数;

        public 敌人坦克(int x, int y, int 速度,Bitmap b上, Bitmap b下, Bitmap b左, Bitmap b右)
        {
          
            攻击速度 = 60;
            转向速度 = 80;
            this.X = x;
            this.Y = y;
            this.I速度 = 速度;
            B上 = b上;
            B下 = b下;
            B右 = b右;
            B左 = b左;
            this.F方向 = 方向.下;
        }
      
        public override void Update()
        {
            移动检查();
            移动();
            攻击检查();
            自动转向();

            base.Update();

        }
        public void 攻击检查()
        {
            攻击计数++;
            if (攻击计数 < 攻击速度)
            {
                return;
            }
            攻击计数 = 0;
            攻击();

        }
        public void 攻击()
        {
            int x = X;
            int y = Y;
            switch (F方向)
            {
                case 方向.上:
                    x += i宽 / 2;
                    break;
                case 方向.下:
                    x += i宽 / 2;
                    y += i高;
                    break;
                case 方向.左:
                    y += i高 / 2;

                    break;
                case 方向.右:
                    x += i宽;
                    y += i高 / 2;
                    break;
                default:
                    break;
            }



            游戏管理者.创建子弹(x, y, F方向, Tag.敌人坦克);


        }
        public void 移动()
        {
           
            switch (F方向)
            {
                case 方向.上:
                    Y -= I速度;
                    break;
                case 方向.下:
                    Y += I速度;
                    break;
                case 方向.左:
                    X -= I速度;
                    break;
                case 方向.右:
                    X += I速度;
                    break;

            }
        }
        public void 移动检查()
        {
            #region 边界检测
            if (F方向 == 方向.上)
            {
                if (Y - I速度 < 0)
                {
                    改变朝向();
                    return;
                }
            }
            else if (F方向 == 方向.下)
            {
                if (Y + I速度 + i高 > 450)
                {
                    改变朝向();
                    return;
                }
            }
            else if (F方向 == 方向.左)
            {
                if (X - I速度 < 0)
                {
                    改变朝向();
                    return;
                }
            }
            else if (F方向 == 方向.右)
            {
                if (X + I速度 + i宽 > 450)
                {
                    改变朝向();
                    return;
                }
            }

            #endregion
            Rectangle r = 获得矩形();
            switch (F方向)
            {
                case 方向.上:
                    r.Y -= I速度;
                    break;
                case 方向.下:
                    r.Y += I速度;
                    break;
                case 方向.左:
                    r.X -= I速度;
                    break;
                case 方向.右:
                    r.X += I速度;
                    break;
                default:
                    break;
            }

            if (游戏管理者.是否碰撞墙(r) != null)
            {
                改变朝向();
                return;
            }
            if (游戏管理者.是否碰撞钢铁(r) != null)
            {
                改变朝向();
                return;
            }
            if (游戏管理者.是否碰撞boss(r))
            {
                改变朝向();
                return;
            }
            if (游戏管理者.是否碰撞我的坦克(r)!=null)
            {
                改变朝向();
                return;
            }

        }

        public void 自动转向()
        {
            转向计数++;
            if (转向计数<转向速度)
            {
                return;
            }
            转向计数 =0;
            改变朝向();
        }
public void 改变朝向()
        {
            while (true)
            {
                方向 f = (方向)rd.Next(0, 4);
                if (f==F方向)
                {
                    continue;
                }
                else
                {
                    F方向 = f;
                    break;
                }
            }
            移动检查();
        }

    }
}
